#include <iostream>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
using namespace std;
typedef long long ll;
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int a[70]={0};
		int b[70]={0};
		ll n,x;
		cin>>n>>x;
		ll n1=n;
		if(x>n)
		{
			cout<<-1<<endl;
			continue;
		}
		if(x==n)
		{
			cout<<n<<endl;
			continue;
		}
		ll p=pow(2,62);
		int maxi=0;
		for(int i=63;i>=1;i--)
		{
			if(p<=x)
			{
				b[i]=1;
				x-=p;
			}
			if(p<=n1)
			{
				a[i]=1;
				n1-=p;
				if(maxi==0)
				{
					maxi=i;
				}
			}
			p/=2;
		}
		
		int flag=1;
		int idx=0;
		p=1;
		int fi=0;
		for(int i=1;i<=63;i++)
		{
			if(p>n)
			{
				break;
			}
			if(a[i]==0 && b[i]==1)
			{
				flag=0;
				break;
			}
			if(a[i]==1 && b[i]==0)
			{
				idx=i;
			}
			if(a[i]==1 && b[i]==1)
			{
				flag=2;
				fi=i;
				if(idx+1==fi) 
				{
					flag=0;
					break;
				}
			}
			if(a[i]!=b[i] && flag==2)
			{
				flag=0;
				break;
			}
			p*=2;
		}
		if(flag)
		{
			
			ll ans=0;
			ans+=pow(2,idx);
			p=pow(2,62);
			
			for(int i=63;i>idx+1;i--)
			{
				if(a[i]==1) 
				{
					ans+=p;
			    }
			    p/=2;
			}
			cout<<ans<<endl;
		}
		else 
		{
			cout<<-1<<endl;
		}
	} 

	return 0;
}

